package main

import "fmt"

//可以类比为 panic、recover、defer 组合起来实现了传统面向对象编程异常处理的 try…catch…finally 功能。
//发生了异常，就可以捕获。在go语言中，使用recover来捕获异常
//recover必须在defer函数中才能生效
var arr [10]int

func set_data(x int) {
	//如果没有这里的recover，程序会直接崩溃退出，并打印错误和堆栈信息：
	//可以把这一段理解为，对整个set_dat的try catch
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("错误处理：", err) //如果发生了错误，则执行这里
		}
	}()
	arr[x] = 88
	fmt.Println("设置成功，x=", x)
}

func main() {
	set_data(2)
	set_data(11) //故意下标超界
	fmt.Println("后续的程序能继续运行")
	fmt.Println(arr)
}
